package org.feichao.xdao;

import org.feichao.xdao.util.DefaultLogger;

import java.lang.reflect.Proxy;
import java.sql.Connection;

/**
 * DAO工厂
 *
 * @author chao
 * @version 2015-05-25
 */
public class XDAO {

    /**
     * 调试信息开关
     */
    public static boolean debug = false;

	/**
	 * 日志
	 */
	private static Logger log = new DefaultLogger();

    /**
     * 设置日志
     *
     * @param l
     */
    public static void setLog(Logger l){
        log = l;
    }

    /**
     * 获取日志
     *
     * @return
     */
    public static Logger getLog(){
        return log;
    }

	/**
	 * 数据源
	 */
	private static DataSource dataSource = null;

    /**
     * 设置数据源
     *
     * @param ds
     */
    public static void setDataSource(DataSource ds){
        dataSource = ds;
    }

    /**
     * 获取数据源
     *
     * @return
     */
    public static DataSource getDataSource(){
        return dataSource;
    }



    /**
     * 获取DAO接口实现
     * @param daoClazz
     * @param <T>
     * @return
     */
	public static <T> T get(Class<T> daoClazz){
		return (T)Proxy.newProxyInstance(daoClazz.getClassLoader(), new Class[]{
				daoClazz
		}, new DAOImplement());
	}

	/**
	 * 数据源接口
	 */
	public static interface DataSource{

		/**
		 * 获取数据库连接
		 * @return
		 */
		Connection getConnection();

	}

	/**
	 * 日志接口
	 */
	public static interface Logger{

		void info(String msg);

		void warn(String msg);

		void error(String msg);

		void error(Throwable e, String msg);
	}


}
